home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1997 February
/
EnigmA AMIGA RUN 15 (1997)(G.R. Edizioni)(IT)[!][issue 1997-02][PLANET CD V].iso
/
progs
/
editor
/
frexxed
/
fpl
/
fmc.fpl
< prev
next >
Wrap
Text File
|
1996-07-24
|
6KB
|
211 lines
// $Id: FMC.FPL 1.13 1996/07/24 23:02:32 jskov Exp $
// $VER: FMC.FPL 2.4 (24.07.96) © Jesper Skov
int maxMajor=10; // We have a maximum number of modes!
int majorCount=0;
int maxMinor=20;
int minorCount=0;
export string majorName[maxMajor]; // Major modes have Name,
export string majorExt[maxMajor]; // Extension match and
export string majorExe[maxMajor]; // Execute string
string minorName[maxMinor]; // Minor modes have no ext&exe
export string majorCycleString = "None"; // For use by PromptInfo
export string majorConfigString = "";
export string minorCheckString = "";
//»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» AddMode() ««
export int AddMode(int type,
string name,
string extensions,
string execute)
{
// Check that name exists?
if (type){ // type_major==1
if (majorCount>=maxMajor)
return 1; // Bummer! No more space!
majorName[majorCount]=name;
// Check that ext&exe exist?
majorExt[majorCount]=extensions;
majorExe[majorCount]=execute;
majorCycleString += joinstr("|", name); // Add mode to MajorMode cycle gadget
majorConfigString += joinstr(",\"", extensions, "\""); // Add extensions string
majorConfigString += joinstr(",\"", execute, "\""); // Add execute string
// The code below will cause trouble if a MajorMode is added, while the
// user is working (i.e. (s)he has several different buffers open).
// Since the AddMode() should only be for use in the startup, I don't
// see this as a problem, though!
DeleteInfo("MajorMode");
ConstructInfo("MajorMode", "","", "LCH", majorCycleString, 0,0,0);
majorCount++;
return 0;
} else { // type_minor==0
if (minorCount>=maxMinor)
return 1; // No more space
minorName[minorCount]=name;
// Maybe warn if ext&exe are not empty?
minorCheckString += joinstr(",\"", name, "\""); // Add mode to minor mode list
minorCount++;
return 0;
}
}
//»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» CheckForce_hookPast ««
export int CheckForced_hookPast()
{
string req = GetLine();
int i = strstr(req,"-*-"); // Extract forced mode if any
if(majorCount) {
if (i>=0) {
int a = strstr(req,"-*-",i+3);
if(a>0) {
req = substr(req, i+3, a-i-3); // rec holds major mode request
} else {
i=-1;
}
}
if(i>=0) {
for(i=0; i<majorCount; i++) { // Check all major modes for match
if(0 == stricmp(majorName[i], req)) {
enableMajorMode(i);
return 0;
}
}
}
}
return 0;
}
//»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» CheckExt_hook() ««
export int CheckExt_hook(string path, string name)
{
int i = strstr(name, ".");
if (i > 0) {
string ext;
int a;
while (0<=(a=strstr(name, ".", i+1))) // Check for 2+ pts
i=a;
a=0;
ext = joinstr("*",substr(name, i + 1, -1),"*");
while(a<majorCount) {
if(0 <= stristr(ReadInfo(majorExt[a]), ext)) {
enableMajorMode(a);
return 0;
}
a++;
}
// no extension matched
}
return 0;
}
//»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» Rename_hookPast() ««
export int Rename_hookPast(string name)
{
CheckExt_hook("",name);
return 0;
}
//»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» enableMajorMode() ««
void enableMajorMode(int number)
{
int i;
if (number>=0){
SetInfo(-1, "MajorMode", number+1);
SetInfo(-1, majorName[number], 1); // Set major mode's flag
for(i=0;i<minorCount;i++) // Disable all minor modes
SetInfo(-1,minorName[i],0);
SetInfo(-1,"face",""); // Clear face
if(strlen(ReadInfo(majorExe[number]))) // and execute it's exeString
ExecuteString(ReadInfo(majorExe[number]));
ReturnStatus(joinstr("Enabled major mode \"",majorName[number], "\"!"));
}
}
//»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» MajorModeControl() ««
export void MajorModeControl()
{
int i = ReadInfo("MajorMode");
PromptInfo(-1, "Buffer Major Mode", -1,-1, "MajorMode");
if (ReadInfo("MajorMode")!=i){ // New major mode selected
if (i) // Disable "old" major mode
SetInfo(-1,majorName[i-1],0);
enableMajorMode(ReadInfo("MajorMode")-1); // Enable new major mode
}
}
//»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» MinorModeControl() ««
export void MinorModeControl()
{
ExecuteString(joinstr("PromptInfo(-1, \"Buffer Minor Modes\", -1,-1",
minorCheckString, ");"));
}
//»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» MajorModeSettings() ««
export void MajorModeSettings()
{
ExecuteString(joinstr("PromptInfo(-1, \"Major Mode Preferences\", -1,-1",
majorConfigString, ");"));
}
//»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» ME() ««
export void ME(string mode_name)
{
SetInfo(-1,mode_name,1);
}
//»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» Info construction ««
ConstructInfo("MajorMode", "","", "LCH", majorCycleString, 0,0,0);
//»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» Menu ««
MenuAdd("i", "Buffer Mode", "", "",
ReadInfo("menu_program_title"),
ReadInfo("menu_program_item")+1); // Add new Customizing menu
MenuAdd("s", "Major...", "MajorModeControl();", "",
ReadInfo("menu_program_title"),
ReadInfo("menu_program_item")+1,-1);
MenuAdd("s", "Minor...", "MinorModeControl();", "",
ReadInfo("menu_program_title"),
ReadInfo("menu_program_item")+1,-1);
MenuAdd("s", "Major Modes...", "MajorModeSettings();", "",
ReadInfo("menu_program_title"),
ReadInfo("menu_program_item"),-1); // Add to Program
MenuBuild();
//»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» Hooking ««
HookPast("Load","CheckForced_hookPast();"); // Checks forced requests
HookPast("Rename","Rename_hookPast"); // Checks extension after rename
Hook("GetFile", "CheckExt_hook"); // Checks extensions